package com.zpark.se.collection.list;

import java.util.ArrayList;
import java.util.List;

/**
 * List集合，List是一个接口，List接口继承了Collection接口，List接口中定义了List集合的常用方法。
 * List集合常用的实现类有：ArrayList、LinkedList、Vector
 * List 是一个有序、可重复的集合，集合中每个元素都有其对应的顺序索引。List 集合允许使用重复元素，
 * 可以通过索引来访问指定位置的集合元素。List 集合默认按元素的添加顺序设置元素的索引，第一个添加到
 * List 集合中的元素的索引为 0，第二个为 1，依此类推。
 */
public class Demo01 {
    public static void main(String[] args) {
        /*
            ArrayList列表是基于数组实现的
            ArrayList 类实现了可变数组的大小，存储在内的数据称为元素。它还提供了快速基于索引访
            问元素的方式，对尾部成员的增加和删除支持较好。使用 ArrayList 创建的集合，允许对集合
            中的元素进行快速的随机访问，不过，向 ArrayList 中插入与删除元素的速度相对较慢。
            ArrayList 类的常用构造方法有如下两种重载形式：
                    1、ArrayList()：构造一个初始容量为 10 的空列表。
                    2、ArrayList(Collection<?extends E>c)：构造一个包含指定 Collection
                    元素的列表，这些元素是按照该 Collection 的迭代器返回它们的顺序排列的。
         */
        // 创建List集合
        List lt = new ArrayList(); // 向上造型

        // 创建ArrayList集合
        /*
            语法：ArrayList<元素类型> 集合名字 = new ArrayList<>();
         */
        ArrayList list = new ArrayList(); // 如果不指定集合采访的元素的类型则默认存放Object
        // 创建ArrayList集合，指定集合元素只能是String
        ArrayList<String> lt1 = new ArrayList<>();

        // 集合常用的方法

        /*
            add(E e)：将指定的元素，添加到该集合的末尾。
         */
        lt1.add("张三");
        System.out.println(lt1);

        /*
            add(int index,E element)：将指定的元素，添加到该集合的指定位置上。
         */
        lt1.add(0, "大锤");
        System.out.println(lt1);

        /*
            get(int index)：返回集合中指定位置的元素。
            参数：index，表示索引值,从0开始，最大索引为集合大小-1
            如果获取集合元素是，索引不在范围内，则会报错IndexOutOfBoundsException
         */
        String s = lt1.get(0);
        System.out.println(s);

        /*
            size()：返回集合中元素的个数。获取集合的大小
         */
        int size = lt1.size();
        System.out.println(size);

        /*
            addAll(Collection<? extends E> c)：将指定集合中的所有元素，添加到该集合的末尾。
         */
        lt.addAll(lt1);
        System.out.println(lt);
    }
}
